import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'

import { visualizer } from 'rollup-plugin-visualizer';

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  const _env_ = loadEnv(mode, process.cwd())
  return {
    plugins: [
      vue(),
      vueJsx(),
      //run report 命令时启动代码分析
      process.env.npm_lifecycle_event === 'report' ? visualizer({
        filename: 'report.html',  //生成分析的文件名
        emitFile: true, //打包后的分析文件是否在打包好的文件包下
        gzipSize: true, //从源代码中收集 gzip 大小并将其显示在图表中
        BrotliSize: true  //搜集brotli压缩包的大小到图表
      }) : null
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    base: './',
    server: {
      host: "0.0.0.0",  //服务域名
      port: 8080, //服务端口
      open: false,  //启动服务时是否打开
      cors: true, //是否允许跨域
      // 代理
      proxy: {
        // 字符串简写写法
        // '/foo': 'http://localhost:4567',
        // 选项写法
        // '/api': {
        //   target: 'http://jsonplaceholder.typicode.com',
        //   changeOrigin: true,
        //   rewrite: (path) => path.replace(/^\/api/, '')
        // },
        // 正则表达式写法
        // '^/fallback/.*': {
        //   target: 'http://jsonplaceholder.typicode.com',
        //   changeOrigin: true,
        //   rewrite: (path) => path.replace(/^\/fallback/, '')
        // },
        // 使用 proxy 实例
        // '/api': {
        //   target: 'http://jsonplaceholder.typicode.com',
        //   changeOrigin: true,
        //   configure: (proxy, options) => {
        //     // proxy 是 'http-proxy' 的实例
        //   }
        // },
        // Proxying websockets or socket.io
        // '/socket.io': {
        //   target: 'ws://localhost:3000',
        //   ws: true
        // }
        [`^${_env_.VITE_BASE_API}`]: {
          target: _env_.VITE_SERVER_URL,
          changeOrigin: true,
          rewrite: (path) => {
            console.log(path);
            console.log(path.replace(_env_.VITE_BASE_API, _env_.VITE_BASE_REWRITE_API));
            return path.replace(_env_.VITE_BASE_API, _env_.VITE_BASE_REWRITE_API)
          }
        },

      }
    },
    build: {
      rollupOptions: {
        output: { //静态资源分类打包
          chunkFileNames: 'static/js/[name].[hash].js',
          entryFileNames: 'static/js/[name].[hash].js',
          assetFileNames: 'static/[ext]/[name].[hash].[ext]',
          manualChunks(id) { //静态资源分拆打包
            if (id.includes('node_modules')) {
              return `vendor.${id.toString().split('node_modules/')[1].split('/')[0].toString()}`;
            }
          }
        }
      }
    }
  }
})
